// 属性默认会生成getter和setter
// 使用final声明的属性只有getter
// 一个dart文件就是一个库
class Person {
  late String name;
  late int age;
  final String address; // 只读不能赋值

  static const a = 10; // 声明静态常量
  static void getName() {
    print('静态方法');
  } // 静态成员(不能访问非静态成员)

  // 构造方法(创建对象时候调用的方法,如果存在构造方法则默认的构造方法失效)
  // Person(String name, int age, String address) {
  //   this.name = name;
  //   this.age = age;
  //   // this.address = age;// 不能被设置可以直接在传入的时候通过语法糖设置
  // }
  // 构造函数语法糖形式(可以给final赋值)
  Person(this.name, this.age, this.address);
  // 匿名构造方法
  // Person.withName(String name) {
  //   this.name = name;
  // }
  // 初始化列表(可以对final赋值)
  Person.withName(Map map)
      : address = map['address'],
        name = map['name'] {
    this.age = map['age'];
  }

  void work() {
    print('name is $name, int is $age');
  }

  // 计算属性
  num get str {
    return age * 2;
  }

  num get str1 => age * 2;
  set str1(value) {
    age = value;
  }
}

// 常量构造方法(类为不可变状态)
// const声明构造方法并且所有变量都是final
class School {
  final int person;
  final String calss;
  const School(this.person, this.calss);
  void work() {
    print(person);
  }
}

// 工厂构造方法
class Home {
  String me;
  factory Home(String me) {
    return Home._getMe(me); // 工厂构造方法可以直接在方法中返回东西
  }

  Home._getMe(this.me) {
    print('object');
  } // 声明的静态方法
}
